package algorithm.easy;

/**
 * @author 江岸
 * @version V1.0
 * @ClassName: NumArray303
 * @description: 给定一个整数数组  nums，求出数组从索引 i 到 j（i ≤ j）范围内元素的总和，包含 i、j 两点。
 *
 * 实现 NumArray 类：
 *
 *     NumArray(int[] nums) 使用数组 nums 初始化对象
 *     int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j（i ≤ j）范围内元素的总和，包含 i、j 两点（也就是 sum(nums[i], nums[i + 1], ... , nums[j])）
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/range-sum-query-immutable
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @date 2021/3/110:25
 * @since V1.0
 */
public class NumArray303 {
    public int[] arr;

    public static void main(String[] args) {
        NumArray303 numArray303 = new NumArray303(new int[]{-2, 0, 3, -5, 2, -1});
        System.out.println(numArray303.sumRange(0,2));
    }

    //前缀和
    public NumArray303(int[] nums) {
        arr = new int[nums.length];
        //一次计算，把i=0到i=n的每个元素和相加，存放
        int res = 0;
        for (int i=0;i<nums.length;i++){
            arr[i] = res + nums[i];
            res = arr[i];
        }
    }

    public int sumRange(int i, int j) {
        if (i>0) return arr[j]-arr[i-1];
        return arr[j];
    }
}
